// 字符串校验和判断的相关方法

function isHexaDigit(digit) {
    var hexVals = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f');
    var len = hexVals.length;
    var i = 0;
    var ret = false;

    for (i = 0; i < len; i++) {
        if (digit == hexVals[i]) {
            break;
        }
    }

    if (i < len) ret = true;

    return ret;
}

/**
 * @description 判断当前字符串是否包含非16进制字符
 * @param {*} str
 * @returns boolean
 */
export function isHexString(str) {
    var i = 0;

    for (i = 0; i < str.length; i++) {
        if (isHexaDigit(str.charAt(i)) == false) {
            return false;
        }
    }
    return true;
}

/**
 * ASCII 转字符串
 * @param {String} str
 */
export function asciiToString(str) {
    // 将字符串按照每4个字符一组分割
    const hexCodes = str.match(/.{1,4}/g);

    // 处理无效输入
    if (!hexCodes) return '';

    return hexCodes.map((hexChars) => String.fromCharCode(parseInt(hexChars, 16))).join('');
}

/**
 * Hex 转字符串
 * @param {String} hex
 * @returns
 */
export function hexToString(hex) {
    // 处理无效输入
    if (!hex) return '';

    // 将十六进制字符串分割成两个字符一组的数组
    const chunkArray = hex.match(/.{1,2}/g);

    // 将每个分组转换成对应的字符，并组合成字符串
    const decodedHex = chunkArray.map((chunk) => String.fromCharCode(parseInt(chunk, 16))).join('');

    // 对结果进行解码，处理特殊字符
    return decodeURIComponent(escape(decodedHex));
}

export function uppercase(value) {
    if (!value) return '';
    value = value.toString();
    return value.toUpperCase();
}
